package com.qqt.csr.message.event;

import org.springframework.context.ApplicationEventPublisher;

/**
 * @Author: yang hao
 * @Date: 2024/12/18 9:06
 * @Description: 事件发布策略
 **/
public interface EventPublisherStrategy {

    /**
     * 发布事件
     * @param eventPublisher {@link ApplicationEventPublisher} 事件发布者
     * @param source {@link Object} 事件源
     */
    void publish(ApplicationEventPublisher eventPublisher, Object source);

    /**
     * 获取事件源类型
     * @return {@link Class} 事件源类型
     */
    Class<?> getSourceType();

    /**
     * 判断是否支持
     * @param source {@link Object} 事件源
     * @return {@link Boolean} 是否支持
     */
    default boolean isSupport(Object source) {
        return getSourceType().isInstance(source);
    }

}

